package com.artevivo.managedBeans;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;
import javax.faces.bean.RequestScoped;

import org.springframework.stereotype.Controller;

import com.artevivo.entidades.Especialidad;
import com.artevivo.entidades.Estilo;
import com.artevivo.services.EspecialidadService;
import com.artevivo.services.EstiloPorEspecialidadService;
import com.artevivo.services.EstiloService;

@Controller(value = "especialidadMB")
@RequestScoped
public class EspecialidadMB implements Serializable {

    private static final long serialVersionUID = 456366423794610659L;

    @Resource
    private EspecialidadService especialidaService;

    @Resource
    private EstiloService estiloService;

    @Resource
    private EstiloPorEspecialidadService estiloPorEspecialidadService;

    private Especialidad especialidad;

    private Especialidad selectedEspecialidad;

    private Estilo selectedEstilo;

    private String nombreEspecialidad;

    private String tipoEspecialidad;

    private String nombreEstilo;

    private List<Especialidad> listaEspecialidades;

    private List<Estilo> listaEstilos;

    private List<String> selectedEstilos;

    public EspecialidadMB() {
        super();
    }

    public String crearEspecialidad() {
        String res = "FAIL";

        try {
            especialidaService.guardarEspecialidad(nombreEspecialidad, tipoEspecialidad);
            res = "SUCCESS";
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

    public String crearEstilo() {
        String res = "FAIL";

        try {
            estiloService.guardarEstilo(nombreEstilo);
            res = "SUCCESS";
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

    public String editar() {
        String res = "FAIL";
        try {
            especialidaService.editarEspecialidad(selectedEspecialidad);
            res = "SUCCESS";
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

    public String borrarEspecialidad() {
        String res = "FAIL";
        try {
            especialidaService.borrarEspecialidad(selectedEspecialidad);
            res = "SUCCESS";
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

    public String borrarEstilo() {
        String res = "FAIL";
        try {
            estiloService.borrarEstilo(selectedEstilo);
            res = "SUCCESS";
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

    public List<Especialidad> getListaEspecialidades() {
        try {
            listaEspecialidades = especialidaService.obtenerEspecialidades();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return listaEspecialidades;
    }

    public List<Estilo> getListaEstilos() {
        try {
            listaEstilos = estiloService.obtenerEstilos();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return listaEstilos;
    }

    public void setListaEspecialidades(List<Especialidad> listaEspecialidades) {
    }

    public Especialidad getEspecialidad() {
        return especialidad;
    }

    public void setEspecialidad(Especialidad especialidad) {
        this.especialidad = especialidad;
    }

    public String getNombreEspecialidad() {
        return nombreEspecialidad;
    }

    public void setNombreEspecialidad(String nombreEspecialidad) {
        this.nombreEspecialidad = nombreEspecialidad;
    }

    public String getTipoEspecialidad() {
        return tipoEspecialidad;
    }

    public void setTipoEspecialidad(String tipoEspecialidad) {
        this.tipoEspecialidad = tipoEspecialidad;
    }

    public Especialidad getSelectedEspecialidad() {
        return selectedEspecialidad;
    }

    public void setSelectedEspecialidad(Especialidad selectedEspecialidad) {
        this.selectedEspecialidad = selectedEspecialidad;
    }

    public Estilo getSelectedEstilo() {
        return selectedEstilo;
    }

    public void setSelectedEstilo(Estilo selectedEstilo) {
        this.selectedEstilo = selectedEstilo;
    }

    public List<String> getEspecialidadesString() {

        List<String> res = new ArrayList<String>();

        try {
            for (Especialidad esp : especialidaService.obtenerEspecialidades()) {
                res.add(esp.getNombre());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return res;
    }

    public List<Estilo> obtenerEstilosPorEspecialidad(Especialidad espe) {
        List<Estilo> lista = new ArrayList<Estilo>();
        try {
            lista = estiloPorEspecialidadService.obtenerEstilosPorEspecialidad(espe);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return lista;
    }

    public String getNombreEstilo() {
        return nombreEstilo;
    }

    public void setNombreEstilo(String nombreEstilo) {
        this.nombreEstilo = nombreEstilo;
    }

    public List<String> getSelectedEstilos() {
        return selectedEstilos;
    }

    public void setSelectedEstilos(List<String> selectedEstilos) {
        this.selectedEstilos = selectedEstilos;
    }

    public void anyadirEstiloEspecialidad() {

        for (String est : selectedEstilos) {

            try {
                estiloPorEspecialidadService.anyadirEstiloAEspecialidad(estiloService.obtenerEstiloPorNombre(est), selectedEspecialidad);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

}